(* This program is free software; you can redistribute it and/or      *)
(* modify it under the terms of the GNU Lesser General Public License *)
(* as published by the Free Software Foundation; either version 2.1   *)
(* of the License, or (at your option) any later version.             *)
(*                                                                    *)
(* This program is distributed in the hope that it will be useful,    *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of     *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      *)
(* GNU General Public License for more details.                       *)
(*                                                                    *)
(* You should have received a copy of the GNU Lesser General Public   *)
(* License along with this program; if not, write to the Free         *)
(* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *)
(* 02110-1301 USA                                                     *)


Require Import Bool.
Require Import Sumbool.
Require Import Arith.
Require Import ZArith NArith Nnat Ndec Ndigits.
From IntMap Require Import Allmaps.
Require Import Wf_nat.

Require Import BDDvar_ad_nat.
Require Import bdd1.
Require Import bdd2.
Require Import bdd3.
Require Import bdd4.
Require Import bdd5_1.
Require Import bdd5_2.
Require Import bdd6.
Require Import bdd7.

Lemma BDDdummy_lemma_3 :
 forall bound : nat,
 (forall m : nat,
  m < bound ->
  forall (cfg : BDDconfig) (node1 node2 : ad) (memo : BDDor_memo),
  BDDconfig_OK cfg ->
  BDDor_memo_OK cfg memo ->
  config_node_OK cfg node1 ->
  config_node_OK cfg node2 ->
  (is_internal_node cfg node1 ->
   is_internal_node cfg node2 ->
   max (nat_of_N (var cfg node1)) (nat_of_N (var cfg node2)) < m) ->
  BDDconfig_OK (fst (BDDor_1 cfg memo node1 node2 m)) /\
  BDDor_memo_OK (fst (BDDor_1 cfg memo node1 node2 m))
    (snd (snd (BDDor_1 cfg memo node1 node2 m))) /\
  config_node_OK (fst (BDDor_1 cfg memo node1 node2 m))
    (fst (snd (BDDor_1 cfg memo node1 node2 m))) /\
  nodes_preserved cfg (fst (BDDor_1 cfg memo node1 node2 m)) /\
  BDDvar_le
    (var (fst (BDDor_1 cfg memo node1 node2 m))
       (fst (snd (BDDor_1 cfg memo node1 node2 m))))
    (BDDvar_max (var cfg node1) (var cfg node2)) = true /\
  bool_fun_eq
    (bool_fun_of_BDD (fst (BDDor_1 cfg memo node1 node2 m))
       (fst (snd (BDDor_1 cfg memo node1 node2 m))))
    (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))) ->
 forall (cfg : BDDconfig) (node1 node2 : ad) (memo : BDDor_memo),
 BDDconfig_OK cfg ->
 BDDor_memo_OK cfg memo ->
 config_node_OK cfg node1 ->
 config_node_OK cfg node2 ->
 (is_internal_node cfg node1 ->
  is_internal_node cfg node2 ->
  max (nat_of_N (var cfg node1)) (nat_of_N (var cfg node2)) < bound) ->
 BDDor_memo_lookup memo node1 node2 = None ->
 in_dom (BDDvar * (ad * ad)) node1 (fst cfg) = true ->
 node2 = BDDone \/ in_dom (BDDvar * (ad * ad)) node2 (fst cfg) = true ->
 is_internal_node cfg node1 ->
 in_dom (BDDvar * (ad * ad)) node2 (fst cfg) = true ->
 is_internal_node cfg node2 ->
 forall bound' : nat,
 bound = S bound' ->
 max (nat_of_N (var cfg node1)) (nat_of_N (var cfg node2)) < bound ->
 BDDcompare (var cfg node1) (var cfg node2) = Datatypes.Lt ->
 BDDconfig_OK (fst (BDDor_1 cfg memo node1 node2 bound)) /\
 BDDor_memo_OK (fst (BDDor_1 cfg memo node1 node2 bound))
   (snd (snd (BDDor_1 cfg memo node1 node2 bound))) /\
 config_node_OK (fst (BDDor_1 cfg memo node1 node2 bound))
   (fst (snd (BDDor_1 cfg memo node1 node2 bound))) /\
 nodes_preserved cfg (fst (BDDor_1 cfg memo node1 node2 bound)) /\
 BDDvar_le
   (var (fst (BDDor_1 cfg memo node1 node2 bound))
      (fst (snd (BDDor_1 cfg memo node1 node2 bound))))
   (BDDvar_max (var cfg node1) (var cfg node2)) = true /\
 bool_fun_eq
   (bool_fun_of_BDD (fst (BDDor_1 cfg memo node1 node2 bound))
      (fst (snd (BDDor_1 cfg memo node1 node2 bound))))
   (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)).
Proof.
  intros bound H cfg node1 node2 memo H0 H1 H2 H3 H4 y H5 H6 H8 H9 H7 bound'
   y0 H10 y1.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
cut (config_node_OK cfg (low cfg node1)).
(* Goal: forall _ : config_node_OK cfg (low cfg node1), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
cut (config_node_OK cfg (low cfg node2)).
(* Goal: forall (_ : config_node_OK cfg (low cfg node2)) (_ : config_node_OK cfg (low cfg node1)), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
cut (config_node_OK cfg (high cfg node1)).
(* Goal: forall (_ : config_node_OK cfg (high cfg node1)) (_ : config_node_OK cfg (low cfg node2)) (_ : config_node_OK cfg (low cfg node1)), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
cut (config_node_OK cfg (high cfg node2)).
(* Goal: forall (_ : config_node_OK cfg (high cfg node2)) (_ : config_node_OK cfg (high cfg node1)) (_ : config_node_OK cfg (low cfg node2)) (_ : config_node_OK cfg (low cfg node1)), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intros H11 H12 H13 H14.
cut
 (is_internal_node cfg node1 ->
  is_internal_node cfg (low cfg node2) ->
  max (nat_of_N (var cfg node1)) (nat_of_N (var cfg (low cfg node2))) <
  bound').
(* Goal: forall _ : forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound', and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H15.
cut
 (BDDconfig_OK (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) /\
  BDDor_memo_OK (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
    (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) /\
  config_node_OK (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
    (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) /\
  nodes_preserved cfg (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) /\
  BDDvar_le
    (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
       (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))))
    (BDDvar_max (var cfg node1) (var cfg (low cfg node2))) = true /\
  bool_fun_eq
    (bool_fun_of_BDD (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
       (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))))
    (bool_fun_or (bool_fun_of_BDD cfg node1)
       (bool_fun_of_BDD cfg (low cfg node2)))).
(* Goal: forall _ : and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H16.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H16; clear H16; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H17; clear H17; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H18; clear H18; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H19; clear H19; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H20; clear H20; intros.
cut
 (config_node_OK (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1).
(* Goal: forall _ : config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1, and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H22.




cut
 (config_node_OK (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
    (high cfg node2)).
(* Goal: forall _ : config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H23.
cut
 (is_internal_node (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
    node1 ->
  is_internal_node (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
    (high cfg node2) ->
  max
    (nat_of_N
       (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1))
    (nat_of_N
       (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (high cfg node2))) < bound').
(* Goal: forall _ : forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound', and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H24.
cut
 (BDDconfig_OK
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound')) /\
  BDDor_memo_OK
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound'))
    (snd
       (snd
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))) /\
  config_node_OK
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound'))
    (fst
       (snd
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))) /\
  nodes_preserved (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound')) /\
  BDDvar_le
    (var
       (fst
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))
       (fst
          (snd
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound'))))
    (BDDvar_max
       (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)
       (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (high cfg node2))) = true /\
  bool_fun_eq
    (bool_fun_of_BDD
       (fst
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))
       (fst
          (snd
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound'))))
    (bool_fun_or
       (bool_fun_of_BDD (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          node1)
       (bool_fun_of_BDD (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (high cfg node2)))).
(* Goal: forall _ : and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H25.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H25; clear H25; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H26; clear H26; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H27; clear H27; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H28; clear H28; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H29; clear H29; intros.
cut
 (config_node_OK
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound'))
    (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))).
(* Goal: forall _ : config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H31.







cut
 (is_internal_node
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound'))
    (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) ->
  BDDcompare
    (var
       (fst
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))
       (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))))
    (var cfg node2) = Datatypes.Lt).











(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H32. 


cut
 (is_internal_node
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound'))
    (fst
       (snd
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))) ->
  BDDcompare
    (var
       (fst
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))
       (fst
          (snd
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')))) (var cfg node2) =
  Datatypes.Lt).












(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H33.




cut
 (BDDconfig_OK
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) /\
  (Neqb (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
     (fst
        (snd
           (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
              (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
              node1 (high cfg node2) bound'))) = false ->
   MapGet _
     (fst
        (fst
           (BDDmake
              (fst
                 (BDDor_1
                    (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                    (snd
                       (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                    node1 (high cfg node2) bound')) 
              (var cfg node2)
              (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
              (fst
                 (snd
                    (BDDor_1
                       (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                       (snd
                          (snd
                             (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                       node1 (high cfg node2) bound'))))))
     (snd
        (BDDmake
           (fst
              (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                 (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                 node1 (high cfg node2) bound')) (var cfg node2)
           (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
           (fst
              (snd
                 (BDDor_1
                    (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                    (snd
                       (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                    node1 (high cfg node2) bound'))))) =
   Some
     (var cfg node2,
     (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')),
     fst
       (snd
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))))) /\
  (Neqb (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
     (fst
        (snd
           (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
              (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
              node1 (high cfg node2) bound'))) = true ->
   snd
     (BDDmake
        (fst
           (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
              (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
              node1 (high cfg node2) bound')) (var cfg node2)
        (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
        (fst
           (snd
              (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                 (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                 node1 (high cfg node2) bound')))) =
   fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) /\
  (forall (a l' r' : ad) (x' : BDDvar),
   (MapGet _
      (fst
         (fst
            (BDDmake
               (fst
                  (BDDor_1
                     (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                     (snd
                        (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                     node1 (high cfg node2) bound')) 
               (var cfg node2)
               (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
               (fst
                  (snd
                     (BDDor_1
                        (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                        (snd
                           (snd
                              (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                        node1 (high cfg node2) bound')))))) a =
    Some (x', (l', r')) ->
    MapGet _
      (fst
         (fst
            (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
               (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
               node1 (high cfg node2) bound'))) a = 
    Some (x', (l', r')) \/
    snd
      (BDDmake
         (fst
            (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
               (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
               node1 (high cfg node2) bound')) (var cfg node2)
         (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
         (fst
            (snd
               (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                  (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                  node1 (high cfg node2) bound')))) = a) /\
   (MapGet _
      (fst
         (fst
            (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
               (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
               node1 (high cfg node2) bound'))) a = 
    Some (x', (l', r')) ->
    MapGet _
      (fst
         (fst
            (BDDmake
               (fst
                  (BDDor_1
                     (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                     (snd
                        (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                     node1 (high cfg node2) bound')) 
               (var cfg node2)
               (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
               (fst
                  (snd
                     (BDDor_1
                        (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                        (snd
                           (snd
                              (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                        node1 (high cfg node2) bound')))))) a =
    Some (x', (l', r')))) /\
  node_OK
    (fst
       (fst
          (BDDmake
             (fst
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound')) 
             (var cfg node2)
             (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             (fst
                (snd
                   (BDDor_1
                      (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                      (snd
                         (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                      node1 (high cfg node2) bound'))))))
    (snd
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound')))))).
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1), @eq comparison (BDDcompare (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H34.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H34; clear H34; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H35; clear H35; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H36; clear H36; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim H37; clear H37; intros.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
cut (BDDconfig_OK (fst (BDDor_1 cfg memo node1 node2 bound))).
(* Goal: forall _ : BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H39.
cut
 (config_node_OK (fst (BDDor_1 cfg memo node1 node2 bound))
    (fst (snd (BDDor_1 cfg memo node1 node2 bound)))).
(* Goal: forall _ : config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H40.
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
cut (nodes_preserved cfg (fst (BDDor_1 cfg memo node1 node2 bound))).
(* Goal: forall _ : nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H41.
cut
 (BDDvar_le
    (var (fst (BDDor_1 cfg memo node1 node2 bound))
       (fst (snd (BDDor_1 cfg memo node1 node2 bound))))
    (BDDvar_max (var cfg node1) (var cfg node2)) = true).
(* Goal: forall _ : @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true, and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H42.
cut
 (bool_fun_eq
    (bool_fun_of_BDD (fst (BDDor_1 cfg memo node1 node2 bound))
       (fst (snd (BDDor_1 cfg memo node1 node2 bound))))
    (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))).
(* Goal: forall _ : bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)), and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2))))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H43.
cut
 (BDDor_memo_OK (fst (BDDor_1 cfg memo node1 node2 bound))
    (snd (snd (BDDor_1 cfg memo node1 node2 bound)))).
(* Goal: forall (_ : @eq ad node2 node2') (_ : @eq ad node1 node1') (_ : @eq (option ad) (@Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some ad node)), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H44.
(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold BDDor_memo_OK in |- *.
(* Goal: forall (node3 node4 node : ad) (_ : @eq (option ad) (BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) node3 node4) (@Some ad node)), and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node3) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node4) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node3) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node4))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node3) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) node4)))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intros node1' node2' node.
rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1).
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (@pair BDDconfig (prod ad (Map (Map ad))) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@pair ad (Map (Map ad)) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (BDDor_memo_put (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1 node2 (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in |- *.
rewrite
 (BDDor_memo_lookup_semantics
    (snd
       (snd
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound'))) node1 node2
    (snd
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node1' node2')
 .
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
elim (sumbool_of_bool (Neqb node1 node1' && Neqb node2 node2')); intro y2.
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite y2.
(* Goal: forall _ : @eq (option ad) (@Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
cut (node1 = node1').
(* Goal: forall (_ : @eq ad node1 node1') (_ : @eq (option ad) (@Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some ad node)), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
cut (node2 = node2').
(* Goal: forall (_ : @eq ad node2 node2') (_ : @eq ad node1 node1') (_ : @eq (option ad) (@Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some ad node)), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H44.
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node), @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H45.
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1'), @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H46.





(* Goal: and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
injection H46.
(* Goal: forall _ : @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node, and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
clear H46; intros.






cut
 (config_node_OK
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node1').
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2'), @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H47.
cut
 (config_node_OK
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node2').
(* Goal: forall _ : config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2', and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H48.
cut
 (config_node_OK
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node).




(* Goal: forall _ : config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node, and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H49.
(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.




(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- H44; rewrite <- H45.






cut
 (var
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node1 = 
  var cfg node1).
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1), @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H50.
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H50.






cut
 (var
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node2 = 
  var cfg node2).
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2) (var cfg node2), @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var cfg node1) (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2) (var cfg node2) *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H51.




(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var cfg node1) (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2) (var cfg node2) *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H51.
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- H46.
rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1) in H42.
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2) (var cfg node2) *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in H42.
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2) (var cfg node2) *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact H42.
rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1) in H41.
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var.
(* Goal: nodes_preserved cfg (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact H41.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (var cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var.
rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1) in H41.
(* Goal: nodes_preserved cfg (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in H39; exact H41.

(* Goal: is_internal_node cfg node1 *)
assumption.





(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- H44; rewrite <- H45.
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- H46.
apply
 bool_fun_eq_trans
  with
    (bf2 := bool_fun_or (bool_fun_of_BDD cfg node1)
              (bool_fun_of_BDD cfg node2)).
rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1) in H43.
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: bool_fun_eq (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1) (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2)) *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in H43; exact H43.

(* Goal: bool_fun_eq (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_or_preserves_eq.
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2))) (bool_fun_of_BDD cfg node2) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_eq_symm.
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_3.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1) in H41.
(* Goal: nodes_preserved cfg (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact H41.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2))) (bool_fun_of_BDD cfg node2) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_eq_symm.
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_3.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1) in H41.
(* Goal: nodes_preserved cfg (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact H41.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- H46.
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact H38.





(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2' *)
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- H44.
apply
 nodes_preserved_2
  with
    (cfg := fst
              (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                 (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                 node1 (high cfg node2) bound')).
apply
 nodes_preserved_2
  with (cfg := fst (BDDor_1 cfg memo node1 (low cfg node2) bound')).
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_2 with (cfg := cfg).
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1' *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- H45.
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_2 with (cfg := cfg).
(* Goal: is_internal_node cfg node1 *)
assumption.

rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1) in H41.
(* Goal: nodes_preserved cfg (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: @eq ad node2 node2' *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact H41.

(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply Neqb_complete.
(* Goal: @eq bool (N.eqb node2 node2') true *)
(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj2 (andb_prop (Neqb node1 node1') (Neqb node2 node2') y2)).

(* Goal: @eq ad node1 node1' *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply Neqb_complete.
(* Goal: @eq bool (N.eqb node1 node1') true *)
(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (andb_prop (Neqb node1 node1') (Neqb node2 node2') y2)).

(* Goal: forall _ : @eq (option ad) (if andb (N.eqb node1 node1') (N.eqb node2 node2') then @Some ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) else BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite y2.
(* Goal: forall _ : @eq (option ad) (BDDor_memo_lookup (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1' node2') (@Some ad node), and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (and (config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')))))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intros H44.
(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
apply
 nodes_preserved_2
  with
    (cfg := fst
              (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                 (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                 node1 (high cfg node2) bound')).
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold BDDor_memo_OK in H26.
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2') *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (H26 node1' node2' node H44)).

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
apply
 nodes_preserved_2
  with
    (cfg := fst
              (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                 (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                 node1 (high cfg node2) bound')).
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold BDDor_memo_OK in H26.
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2' *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (proj2 (H26 node1' node2' node H44))).

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
apply
 nodes_preserved_2
  with
    (cfg := fst
              (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                 (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                 node1 (high cfg node2) bound')).
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold BDDor_memo_OK in H26.
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (proj2 (proj2 (H26 node1' node2' node H44)))).

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (@eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split.
cut
 (var
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node =
  var
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound')) node).
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node), @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H45.
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H45.
cut
 (var
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node1' =
  var
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound')) node1').
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1'), @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H46.
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (BDDvar_max (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H46.
cut
 (var
    (fst
       (BDDmake
          (fst
             (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                node1 (high cfg node2) bound')) (var cfg node2)
          (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
          (fst
             (snd
                (BDDor_1
                   (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                   (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                   node1 (high cfg node2) bound'))))) node2' =
  var
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound')) node2').
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2'), @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H47.
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H47.
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold BDDor_memo_OK in H26.
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2'))) true *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (proj2 (proj2 (proj2 (H26 node1' node2' node H44))))).

(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var_1.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold BDDor_memo_OK in H26.
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2' *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (proj2 (H26 node1' node2' node H44))).

(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var_1.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
apply BDDmake_preserves_nodes; assumption.

(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: @eq BDDvar (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold BDDor_memo_OK in H26.
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2') *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (H26 node1' node2' node H44)).

apply
 nodes_preserved_var_1
  with
    (cfg := fst
              (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                 (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                 node1 (high cfg node2) bound')).
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (proj2 (proj2 (H26 node1' node2' node H44)))).

apply
 bool_fun_eq_trans
  with
    (bf2 := bool_fun_of_BDD
              (fst
                 (BDDor_1
                    (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                    (snd
                       (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                    node1 (high cfg node2) bound')) node).
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_3.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (proj2 (proj2 (H26 node1' node2' node H44)))).

apply
 bool_fun_eq_trans
  with
    (bf2 := bool_fun_or
              (bool_fun_of_BDD
                 (fst
                    (BDDor_1
                       (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                       (snd
                          (snd
                             (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                       node1 (high cfg node2) bound')) node1')
              (bool_fun_of_BDD
                 (fst
                    (BDDor_1
                       (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                       (snd
                          (snd
                             (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                       node1 (high cfg node2) bound')) node2')).
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2')) *)
(* Goal: bool_fun_eq (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1') (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2')) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node1') (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2')) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj2 (proj2 (proj2 (proj2 (H26 node1' node2' node H44))))).

(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2))) (bool_fun_of_BDD cfg node2) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_eq_symm.
(* Goal: bool_fun_eq (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_or_preserves_eq.
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_3.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node1' *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) node2') (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2') *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (H26 node1' node2' node H44)).

(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_3.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) node2' *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact (proj1 (proj2 (H26 node1' node2' node H44))).

apply
 bool_fun_eq_trans
  with
    (bf2 := bool_fun_if (var cfg node2)
              (bool_fun_or (bool_fun_of_BDD cfg node1)
                 (bool_fun_of_BDD cfg (high cfg node2)))
              (bool_fun_or (bool_fun_of_BDD cfg node1)
                 (bool_fun_of_BDD cfg (low cfg node2)))).
rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1).
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (@pair BDDconfig (prod ad (Map (Map ad))) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@pair ad (Map (Map ad)) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (BDDor_memo_put (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1 node2 (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in |- *.
apply
 bool_fun_eq_trans
  with
    (bf2 := bool_fun_if (var cfg node2)
              (bool_fun_of_BDD
                 (fst
                    (BDDor_1
                       (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                       (snd
                          (snd
                             (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                       node1 (high cfg node2) bound'))
                 (fst
                    (snd
                       (BDDor_1
                          (fst
                             (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                          (snd
                             (snd
                                (BDDor_1 cfg memo node1 
                                   (low cfg node2) bound'))) node1
                          (high cfg node2) bound'))))
              (bool_fun_of_BDD
                 (fst
                    (BDDor_1
                       (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                       (snd
                          (snd
                             (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                       node1 (high cfg node2) bound'))
                 (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))))).
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (bool_fun_if (var cfg node2) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))))) (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_bool_fun.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))))) (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_if_preserves_eq.
apply
 bool_fun_eq_trans
  with
    (bf2 := bool_fun_or
              (bool_fun_of_BDD
                 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)
              (bool_fun_of_BDD
                 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                 (high cfg node2))).
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: bool_fun_eq (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_or_preserves_eq.
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_3.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_3.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.


(* Goal: is_internal_node cfg node1 *)
assumption.

apply
 bool_fun_eq_trans
  with
    (bf2 := bool_fun_of_BDD
              (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
              (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))).
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_3.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

apply
 bool_fun_eq_trans
  with
    (bf2 := bool_fun_or (bool_fun_of_BDD cfg node1)
              (bool_fun_if (var cfg node2)
                 (bool_fun_of_BDD cfg (high cfg node2))
                 (bool_fun_of_BDD cfg (low cfg node2)))).
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (high cfg node2))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2)))) *)
(* Goal: bool_fun_eq (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_if_lemma_3.

(* Goal: bool_fun_eq (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2)))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node2)) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_or_preserves_eq.
(* Goal: bool_fun_eq (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg node1) *)
(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2))) (bool_fun_of_BDD cfg node2) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold bool_fun_eq in |- *.
(* Goal: @eq BDDvar xl xl *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
reflexivity.

(* Goal: bool_fun_eq (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2))) (bool_fun_of_BDD cfg node2) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_eq_symm.
(* Goal: bool_fun_eq (bool_fun_of_BDD cfg node2) (bool_fun_if (var cfg node2) (bool_fun_of_BDD cfg (high cfg node2)) (bool_fun_of_BDD cfg (low cfg node2))) *)
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply bool_fun_if_lemma_2.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold BDDvar_le in |- *.
(* Goal: @eq bool (Nleb (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)))) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply Nleb_trans with (b := var cfg node2).
(* Goal: @eq bool (Nleb (var cfg node2) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
fold BDDvar_le in |- *.
rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1).
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (@pair BDDconfig (prod ad (Map (Map ad))) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@pair ad (Map (Map ad)) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (BDDor_memo_put (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1 node2 (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in |- *.
(* Goal: @eq bool (BDDvar_le (var (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (var cfg node2)) true *)
(* Goal: @eq bool (Nleb (var cfg node2) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_var_order.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq bool (Nleb (var cfg node2) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
fold BDDvar_le in |- *.
(* Goal: @eq bool (BDDvar_le (var cfg node2) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg node2))) bound *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDvar_le_max_2.

apply
 nodes_preserved_trans
  with (cfg2 := fst (BDDor_1 cfg memo node1 (low cfg node2) bound')).
(* Goal: is_internal_node cfg node1 *)
assumption.

apply
 nodes_preserved_trans
  with
    (cfg2 := fst
               (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
                  (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
                  node1 (high cfg node2) bound')).
(* Goal: is_internal_node cfg node1 *)
assumption.

rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1).
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (@pair BDDconfig (prod ad (Map (Map ad))) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@pair ad (Map (Map ad)) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (BDDor_memo_put (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1 node2 (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in |- *.
(* Goal: nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_preserves_nodes.
(* Goal: is_internal_node cfg node1 *)
assumption.

rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1).
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (@pair BDDconfig (prod ad (Map (Map ad))) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@pair ad (Map (Map ad)) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (BDDor_memo_put (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1 node2 (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in |- *.
(* Goal: config_node_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 node2 bound)) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact H38.

rewrite
 (BDDor_1_lemma_internal_2 cfg memo node1 node2 bound bound' y H0 H8 H7 H10
    y0 y1).
(* Goal: BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (@pair BDDconfig (prod ad (Map (Map ad))) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@pair ad (Map (Map ad)) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (BDDor_memo_put (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) node1 node2 (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
simpl in |- *.
(* Goal: BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
exact H34.

(* Goal: and (BDDconfig_OK (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) false, @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) (var cfg node2) (@pair ad ad (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))) (and (forall _ : @eq bool (N.eqb (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) true, @eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (forall (a l' r' : ad) (x' : BDDvar), and (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), or (@eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r')))) (@eq ad (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))) a)) (forall _ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))), @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) a) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) x' (@pair ad ad l' r'))))) (node_OK (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))))) (@snd BDDconfig ad (BDDmake (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (var cfg node2) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))))))))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDmake_semantics.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: forall (xl : BDDvar) (ll rl : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xl (@pair ad ad ll rl)))), @eq comparison (BDDcompare xl (var cfg node2)) Lt *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intros xl ll rl H34.
cut
 (xl =
  var
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound'))
    (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))).
(* Goal: forall _ : @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H35.
(* Goal: @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H35.
(* Goal: @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar xl (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply H32.
(* Goal: is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: @eq BDDvar xl (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split with xl.
(* Goal: @ex ad (fun l : ad => @ex ad (fun r : ad => @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xl (@pair ad ad l r))))) *)
(* Goal: @eq BDDvar xl (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split with ll.
(* Goal: @ex ad (fun r : ad => @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xl (@pair ad ad ll r)))) *)
(* Goal: @eq BDDvar xl (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split with rl.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq BDDvar xl (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold var in |- *.
(* Goal: @eq comparison (BDDcompare (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H34.
(* Goal: @eq BDDvar xl xl *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
reflexivity.

(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intros xr lr rr H34.
cut
 (xr =
  var
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound'))
    (fst
       (snd
          (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
             (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))
             node1 (high cfg node2) bound')))).
(* Goal: forall _ : @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H35.
(* Goal: @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H35.
(* Goal: @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply H33.
(* Goal: is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split with xr.
(* Goal: @ex ad (fun l : ad => @ex ad (fun r : ad => @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad l r))))) *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split with lr.
(* Goal: @ex ad (fun r : ad => @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr r)))) *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
split with rr.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq BDDvar xl xl *)
(* Goal: forall (xr : BDDvar) (lr rr : ad) (_ : @eq (option (prod BDDvar (prod ad ad))) (MapGet (prod BDDvar (prod ad ad)) (@fst BDDstate (prod BDDsharing_map ad) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (@Some (prod BDDvar (prod ad ad)) (@pair BDDvar (prod ad ad) xr (@pair ad ad lr rr)))), @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
unfold var in |- *; rewrite H34; reflexivity.

(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H33.
apply
 BDDcompare_le_INFERIEUR_1
  with
    (y := BDDvar_max
            (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)
            (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
               (high cfg node2))).
(* Goal: is_internal_node cfg node1 *)
assumption.

cut
 (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 =
  var cfg node1).
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1), @eq comparison (BDDcompare (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H34.
(* Goal: @eq comparison (BDDcompare (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H34.
cut
 (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) =
  var cfg (high cfg node2)).
(* Goal: @eq comparison (BDDcompare xr (var cfg node2)) Lt *)
(* Goal: @eq BDDvar xr (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro; rewrite H35.
(* Goal: @eq comparison (BDDcompare (BDDvar_max (var cfg node1) (var cfg (high cfg node2))) (var cfg node2)) Lt *)
(* Goal: lt (N.to_nat (var cfg node2)) (S bound') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)) (var cfg (high cfg node2)) *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDvar_ordered_high_2.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var_1.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var_1.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: forall _ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H32.
cut
 (var
    (fst
       (BDDor_1 (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
          (snd (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1
          (high cfg node2) bound'))
    (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound'))) =
  var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound'))
    (fst (snd (BDDor_1 cfg memo node1 (low cfg node2) bound')))).
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))), @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro H33.
(* Goal: @eq comparison (BDDcompare (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var cfg node2)) Lt *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (and (nodes_preserved (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (BDDvar_max (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) node1 (high cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite H33.
apply
 BDDcompare_le_INFERIEUR_1
  with (y := BDDvar_max (var cfg node1) (var cfg (low cfg node2))).
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq comparison (BDDcompare (BDDvar_max (var cfg node1) (var cfg (low cfg node2))) (var cfg node2)) Lt *)
(* Goal: lt (N.to_nat (var cfg node2)) (S bound') *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDvar_ordered_low_2.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var_1.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

apply
 nodes_preserved_2
  with (cfg := fst (BDDor_1 cfg memo node1 (low cfg node2) bound')).
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply H.
(* Goal: lt bound' bound *)
(* Goal: BDDconfig_OK cfg *)
(* Goal: BDDor_memo_OK cfg memo *)
(* Goal: config_node_OK cfg node1 *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite y0; unfold lt in |- *; apply le_n.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: forall (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (_ : is_internal_node (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intros H24 H25.
cut
 (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 =
  var cfg node1).
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1), lt (max (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro; rewrite H26.
cut
 (var (fst (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) =
  var cfg (high cfg node2)).
(* Goal: forall _ : @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)) (var cfg (high cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)))) bound' *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)) (var cfg (high cfg node2)) *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intro; rewrite H27.
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply lt_trans_1 with (y := nat_of_N (var cfg node2)).
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) (N.to_nat (var cfg node2)) *)
(* Goal: lt (N.to_nat (var cfg node2)) (S bound') *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply lt_max_nat_of_N.
(* Goal: @eq comparison (BDDcompare (BDDvar_max (var cfg node1) (var cfg (high cfg node2))) (var cfg node2)) Lt *)
(* Goal: lt (N.to_nat (var cfg node2)) (S bound') *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2)) (var cfg (high cfg node2)) *)
(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDvar_ordered_high_2.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: lt (N.to_nat (var cfg node2)) (S bound') *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- y0.
apply
 le_lt_trans
  with (m := max (nat_of_N (var cfg node1)) (nat_of_N (var cfg node2))).
(* Goal: le (N.to_nat (var cfg node2)) (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg node2))) *)
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg node2))) bound *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply le_nat_of_N_max.
(* Goal: @eq bool (BDDvar_le (var cfg node2) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg node2))) bound *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDvar_le_max_2.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var_1.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: @eq BDDvar (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1) (var cfg node1) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (high cfg node2) *)
(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_var_1.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_2 with (cfg := cfg).

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) node1 *)
(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply nodes_preserved_2 with (cfg := cfg).
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: and (BDDconfig_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (BDDor_memo_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@snd ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (config_node_OK (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (and (nodes_preserved cfg (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound'))) (and (@eq bool (BDDvar_le (var (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (BDDvar_max (var cfg node1) (var cfg (low cfg node2)))) true) (bool_fun_eq (bool_fun_of_BDD (@fst BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')) (@fst ad BDDor_memo (@snd BDDconfig (prod ad BDDor_memo) (BDDor_1 cfg memo node1 (low cfg node2) bound')))) (bool_fun_or (bool_fun_of_BDD cfg node1) (bool_fun_of_BDD cfg (low cfg node2)))))))) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply H.
(* Goal: lt bound' bound *)
(* Goal: BDDconfig_OK cfg *)
(* Goal: BDDor_memo_OK cfg memo *)
(* Goal: config_node_OK cfg node1 *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite y0; unfold lt in |- *; apply le_n.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: forall (_ : is_internal_node cfg node1) (_ : is_internal_node cfg (low cfg node2)), lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
intros H15 H16.
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) bound' *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply lt_trans_1 with (y := nat_of_N (var cfg node2)).
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg (low cfg node2)))) (N.to_nat (var cfg node2)) *)
(* Goal: lt (N.to_nat (var cfg node2)) (S bound') *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply lt_max_nat_of_N.
(* Goal: @eq comparison (BDDcompare (BDDvar_max (var cfg node1) (var cfg (low cfg node2))) (var cfg node2)) Lt *)
(* Goal: lt (N.to_nat (var cfg node2)) (S bound') *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDvar_ordered_low_2.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: lt (N.to_nat (var cfg node2)) (S bound') *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
rewrite <- y0.
apply
 le_lt_trans
  with (m := max (nat_of_N (var cfg node1)) (nat_of_N (var cfg node2))).
(* Goal: le (N.to_nat (var cfg node2)) (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg node2))) *)
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg node2))) bound *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply le_nat_of_N_max.
(* Goal: @eq bool (BDDvar_le (var cfg node2) (BDDvar_max (var cfg node1) (var cfg node2))) true *)
(* Goal: lt (max (N.to_nat (var cfg node1)) (N.to_nat (var cfg node2))) bound *)
(* Goal: config_node_OK cfg (high cfg node2) *)
(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply BDDvar_le_max_2.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply high_OK.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK cfg (high cfg node1) *)
(* Goal: config_node_OK cfg (low cfg node2) *)
(* Goal: config_node_OK cfg (low cfg node1) *)
apply high_OK.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK cfg (low cfg node1) *)
apply low_OK.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: config_node_OK cfg (low cfg node1) *)
apply low_OK.
(* Goal: is_internal_node cfg node1 *)
assumption.

(* Goal: is_internal_node cfg node1 *)
assumption.
Qed.