library;
import self as self;
import "dart:core" as core;

static method main() → void {
  core::List<core::int> list = <core::int>[1, 2, 3];
  core::print(self::subs<core::int>(list));
  core::print(self::perms<core::int>(list));
  core::print(self::equals<core::int>(list, list));
}
static method subs<A extends core::Object? = dynamic>(core::List<self::subs::A%> list) → core::List<core::List<self::subs::A%>>
  return block {
    core::List<core::List<self::subs::A%>> #t1;
    final synthesized core::List<self::subs::A%> #0#0 = list;
    synthesized core::int #0#1;
    synthesized core::bool #0#1#isSet = false;
    final const synthesized core::int #0#2 = #C1;
    final const synthesized core::int #0#4 = #C2;
    #L1:
    {
      {
        if((#0#1#isSet ?{core::int} #0#1 : let final dynamic #t2 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) {
          #t1 = <core::List<self::subs::A%>>[];
          break #L1;
        }
      }
      {
        hoisted self::subs::A% x;
        hoisted core::List<self::subs::A%> xs;
        if((#0#1#isSet ?{core::int} #0#1 : let final dynamic #t3 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) {
          x = #0#0.{core::List::[]}(0){(core::int) → self::subs::A%};
          xs = #0#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::subs::A%>};
          #t1 = block {
            final core::List<core::List<self::subs::A%>> #t4 = <core::List<self::subs::A%>>[];
            for (core::List<self::subs::A%> ys in self::subs<self::subs::A%>(xs))
              #t4.{core::List::addAll}{Invariant}(<core::List<self::subs::A%>>[<self::subs::A%>[x].{core::List::+}(ys){(core::List<self::subs::A%>) → core::List<self::subs::A%>}, ys]){(core::Iterable<core::List<self::subs::A%>>) → void};
            #t4.{core::List::add}{Invariant}(<self::subs::A%>[x]){(core::List<self::subs::A%>) → void};
          } =>#t4;
          break #L1;
        }
      }
    }
  } =>#t1;
static method perms<A extends core::Object? = dynamic>(core::List<self::perms::A%> list) → core::List<core::List<self::perms::A%>>
  return block {
    core::List<core::List<self::perms::A%>> #t5;
    final synthesized core::List<self::perms::A%> #0#0 = list;
    synthesized core::int #0#1;
    synthesized core::bool #0#1#isSet = false;
    final const synthesized core::int #0#2 = #C1;
    final const synthesized core::int #0#4 = #C2;
    #L2:
    {
      {
        if((#0#1#isSet ?{core::int} #0#1 : let final dynamic #t6 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool} || (#0#1#isSet ?{core::int} #0#1 : let final dynamic #t7 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C2) {
          #t5 = <core::List<self::perms::A%>>[list];
          break #L2;
        }
      }
      {
        hoisted self::perms::A% x;
        hoisted core::List<self::perms::A%> xs;
        if((#0#1#isSet ?{core::int} #0#1 : let final dynamic #t8 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) {
          x = #0#0.{core::List::[]}(0){(core::int) → self::perms::A%};
          xs = #0#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::perms::A%>};
          #t5 = block {
            final core::List<core::List<self::perms::A%>> #t9 = <core::List<self::perms::A%>>[];
            for (core::int i = 0; i.{core::num::<}(list.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
              for (core::List<self::perms::A%> perm in self::perms<self::perms::A%>(xs))
                #t9.{core::List::add}{Invariant}( block {
                  final core::List<self::perms::A%> #t10 = core::List::of<self::perms::A%>(perm.{core::Iterable::take}(i){(core::int) → core::Iterable<self::perms::A%>});
                  #t10.{core::List::add}{Invariant}(x){(self::perms::A%) → void};
                  #t10.{core::List::addAll}{Invariant}(perm.{core::Iterable::skip}(i){(core::int) → core::Iterable<self::perms::A%>}){(core::Iterable<self::perms::A%>) → void};
                } =>#t10){(core::List<self::perms::A%>) → void};
          } =>#t9;
          break #L2;
        }
      }
    }
  } =>#t5;
static method equals<A extends core::Object? = dynamic>(core::List<self::equals::A%> a, core::List<self::equals::A%> b) → core::bool
  return block {
    core::bool #t11;
    final synthesized(core::List<self::equals::A%>, core::List<self::equals::A%>) #0#0 = (a, b);
    synthesized core::bool #0#4;
    synthesized core::bool #0#4#isSet = false;
    synthesized core::int #0#2;
    synthesized core::bool #0#2#isSet = false;
    synthesized core::List<self::equals::A%> #0#1;
    synthesized core::bool #0#1#isSet = false;
    final const synthesized core::int #0#3 = #C1;
    synthesized core::bool #0#7;
    synthesized core::bool #0#7#isSet = false;
    synthesized core::int #0#6;
    synthesized core::bool #0#6#isSet = false;
    synthesized core::List<self::equals::A%> #0#5;
    synthesized core::bool #0#5#isSet = false;
    synthesized core::bool #0#9;
    synthesized core::bool #0#9#isSet = false;
    final const synthesized core::int #0#8 = #C2;
    synthesized core::bool #0#11;
    synthesized core::bool #0#11#isSet = false;
    #L3:
    {
      {
        if((#0#4#isSet ?{core::bool} #0#4 : let final dynamic #t12 = #0#4#isSet = true in #0#4 = (#0#2#isSet ?{core::int} #0#2 : let final dynamic #t13 = #0#2#isSet = true in #0#2 = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1 : let final dynamic #t14 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) && (#0#7#isSet ?{core::bool} #0#7 : let final dynamic #t15 = #0#7#isSet = true in #0#7 = (#0#6#isSet ?{core::int} #0#6 : let final dynamic #t16 = #0#6#isSet = true in #0#6 = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5 : let final dynamic #t17 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool})) {
          #t11 = true;
          break #L3;
        }
      }
      {
        if((#0#9#isSet ?{core::bool} #0#9 : let final dynamic #t18 = #0#9#isSet = true in #0#9 = (#0#2#isSet ?{core::int} #0#2 : let final dynamic #t19 = #0#2#isSet = true in #0#2 = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1 : let final dynamic #t20 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && (#0#7#isSet ?{core::bool} #0#7 : let final dynamic #t21 = #0#7#isSet = true in #0#7 = (#0#6#isSet ?{core::int} #0#6 : let final dynamic #t22 = #0#6#isSet = true in #0#6 = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5 : let final dynamic #t23 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool})) {
          #t11 = false;
          break #L3;
        }
      }
      {
        if((#0#4#isSet ?{core::bool} #0#4 : let final dynamic #t24 = #0#4#isSet = true in #0#4 = (#0#2#isSet ?{core::int} #0#2 : let final dynamic #t25 = #0#2#isSet = true in #0#2 = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1 : let final dynamic #t26 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) && (#0#11#isSet ?{core::bool} #0#11 : let final dynamic #t27 = #0#11#isSet = true in #0#11 = (#0#6#isSet ?{core::int} #0#6 : let final dynamic #t28 = #0#6#isSet = true in #0#6 = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5 : let final dynamic #t29 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool})) {
          #t11 = false;
          break #L3;
        }
      }
      {
        hoisted self::equals::A% l;
        hoisted core::List<self::equals::A%> ls;
        hoisted self::equals::A% r;
        hoisted core::List<self::equals::A%> rs;
        if((#0#9#isSet ?{core::bool} #0#9 : let final dynamic #t30 = #0#9#isSet = true in #0#9 = (#0#2#isSet ?{core::int} #0#2 : let final dynamic #t31 = #0#2#isSet = true in #0#2 = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1 : let final dynamic #t32 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t33 = l = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1 : let final dynamic #t34 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::[]}(0){(core::int) → self::equals::A%} in true) && (let final dynamic #t35 = ls = (#0#1#isSet ?{core::List<self::equals::A%>} #0#1 : let final dynamic #t36 = #0#1#isSet = true in #0#1 = #0#0.$1{core::List<self::equals::A%>}).{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::equals::A%>} in true) && (#0#11#isSet ?{core::bool} #0#11 : let final dynamic #t37 = #0#11#isSet = true in #0#11 = (#0#6#isSet ?{core::int} #0#6 : let final dynamic #t38 = #0#6#isSet = true in #0#6 = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5 : let final dynamic #t39 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool})) {
          r = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5 : let final dynamic #t40 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::[]}(0){(core::int) → self::equals::A%};
          rs = (#0#5#isSet ?{core::List<self::equals::A%>} #0#5 : let final dynamic #t41 = #0#5#isSet = true in #0#5 = #0#0.$2{core::List<self::equals::A%>}).{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::equals::A%>};
          #t11 = l =={core::Object::==}{(core::Object) → core::bool} r && self::equals<self::equals::A%>(ls, rs);
          break #L3;
        }
      }
    }
  } =>#t11;

constants  {
  #C1 = 0
  #C2 = 1
}
