internal/core/adt: consider closed status for equality

Change-Id: Ie7c76352a875f295808841550cdd4b79c75f73c4
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/8102
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cue/testdata/comprehensions/issue507.txtar b/cue/testdata/comprehensions/issue507.txtar
index c4b6b38..659eb8b 100644
--- a/cue/testdata/comprehensions/issue507.txtar
+++ b/cue/testdata/comprehensions/issue507.txtar
@@ -25,8 +25,9 @@
 ]
 -- out/eval --
 (struct){
-  somelist: (#list){
-  }
+  somelist: (list){ |(*(#list){
+    }, (list){
+    }) }
   foo: (#list){
   }
   otherlist: (#list){
diff --git a/cue/testdata/fulleval/027_len_of_incomplete_types.txtar b/cue/testdata/fulleval/027_len_of_incomplete_types.txtar
index a2f2aeb..5b2fc83 100644
--- a/cue/testdata/fulleval/027_len_of_incomplete_types.txtar
+++ b/cue/testdata/fulleval/027_len_of_incomplete_types.txtar
@@ -34,8 +34,9 @@
 <0>{args: [], v1: 0, v2: 0, v3: 0, v4: 1, v5: len ((<1>{a: 3} | <2>{a: 4})), v6: len (('sf' | 'dd')), v7: 2, v8: len (([2] | [1,2])), v9: 4, v10: 0}
 -- out/eval --
 (struct){
-  args: (#list){
-  }
+  args: (list){ |(*(#list){
+    }, (list){
+    }) }
   v1: (int){ 0 }
   v2: (int){ 0 }
   v3: (int){ 0 }
diff --git a/cue/testdata/fulleval/053_issue312.txtar b/cue/testdata/fulleval/053_issue312.txtar
index 4b60559..85a5bf0 100644
--- a/cue/testdata/fulleval/053_issue312.txtar
+++ b/cue/testdata/fulleval/053_issue312.txtar
@@ -21,5 +21,6 @@
 -- out/legacy-debug --
 <0>{ <1>for _, x in [1] yield <2>{}, (*close (<3>{}) | <4>{[]: <5>(_: string)->null, })}
 -- out/eval --
-(#struct){
-}
+(struct){ |(*(#struct){
+  }, (struct){
+  }) }
diff --git a/doc/tutorial/kubernetes/manual/services/cloud.cue b/doc/tutorial/kubernetes/manual/services/cloud.cue
index e16bbff..0cbebcc 100644
--- a/doc/tutorial/kubernetes/manual/services/cloud.cue
+++ b/doc/tutorial/kubernetes/manual/services/cloud.cue
@@ -26,7 +26,7 @@
 	port: [string]: int
 
 	arg: [string]: string
-	args: [ for k, v in arg { "-\(k)=\(v)" } ] | [...string]
+	args: *[ for k, v in arg {"-\(k)=\(v)"}] | [...string]
 
 	// Environment variables
 	env: [string]: string
diff --git a/doc/tutorial/kubernetes/testdata/manual.out b/doc/tutorial/kubernetes/testdata/manual.out
index 9c926ab..b005d07 100644
--- a/doc/tutorial/kubernetes/testdata/manual.out
+++ b/doc/tutorial/kubernetes/testdata/manual.out
@@ -159,7 +159,7 @@
             etcd:           "etcd:2379"
             "event-server": "events:7788"
         }
-        args: ["-etcd=etcd:2379", "-event-server=events:7788"] | []
+        args: ["-etcd=etcd:2379", "-event-server=events:7788"]
         env: {}
         label: {
             app:       "breaddispatcher"
@@ -255,7 +255,7 @@
                         containers: [{
                             name:  "breaddispatcher"
                             image: "gcr.io/myproj/breaddispatcher:v0.3.24"
-                            args:  ["-etcd=etcd:2379", "-event-server=events:7788"] | []
+                            args: ["-etcd=etcd:2379", "-event-server=events:7788"]
                             ports: [{
                                 name:          "http"
                                 containerPort: 7080
@@ -537,7 +537,7 @@
             }
         }
         port: {}
-        args: ["-http=:8080", "-etcd=etcd:2379"] | []
+        args: ["-http=:8080", "-etcd=etcd:2379"]
         env: {}
         label: {
             app:       "valeter"
@@ -633,7 +633,7 @@
                         containers: [{
                             name:  "valeter"
                             image: "gcr.io/myproj/valeter:v0.0.4"
-                            args:  ["-http=:8080", "-etcd=etcd:2379"] | []
+                            args: ["-http=:8080", "-etcd=etcd:2379"]
                             ports: [{
                                 name:          "http"
                                 containerPort: 8080
@@ -790,7 +790,7 @@
             http: ":8080"
             etcd: "etcd:2379"
         }
-        args: ["-http=:8080", "-etcd=etcd:2379"] | []
+        args: ["-http=:8080", "-etcd=etcd:2379"]
         env: {}
         label: {
             app:       "waterdispatcher"
@@ -886,7 +886,7 @@
                         containers: [{
                             name:  "waterdispatcher"
                             image: "gcr.io/myproj/waterdispatcher:v0.0.48"
-                            args:  ["-http=:8080", "-etcd=etcd:2379"] | []
+                            args: ["-http=:8080", "-etcd=etcd:2379"]
                             ports: [{
                                 name:          "http"
                                 containerPort: 7080
@@ -1130,7 +1130,7 @@
             }
         }
         port: {}
-        args: ["-name=$(NAME)", "-data-dir=/data/etcd3", "-initial-advertise-peer-urls=http://$(IP):2380", "-listen-peer-urls=http://$(IP):2380", "-listen-client-urls=http://$(IP):2379,http://127.0.0.1:2379", "-advertise-client-urls=http://$(IP):2379", "-discovery=https://discovery.etcd.io/xxxxxx"] | []
+        args: ["-name=$(NAME)", "-data-dir=/data/etcd3", "-initial-advertise-peer-urls=http://$(IP):2380", "-listen-peer-urls=http://$(IP):2380", "-listen-client-urls=http://$(IP):2379,http://127.0.0.1:2379", "-advertise-client-urls=http://$(IP):2379", "-discovery=https://discovery.etcd.io/xxxxxx"]
         label: {
             app:       "etcd"
             domain:    "prod"
@@ -1245,7 +1245,7 @@
                         containers: [{
                             name:  "etcd"
                             image: "quay.io/coreos/etcd:v3.3.10"
-                            args:  ["-name=$(NAME)", "-data-dir=/data/etcd3", "-initial-advertise-peer-urls=http://$(IP):2380", "-listen-peer-urls=http://$(IP):2380", "-listen-client-urls=http://$(IP):2379,http://127.0.0.1:2379", "-advertise-client-urls=http://$(IP):2379", "-discovery=https://discovery.etcd.io/xxxxxx"] | []
+                            args: ["-name=$(NAME)", "-data-dir=/data/etcd3", "-initial-advertise-peer-urls=http://$(IP):2380", "-listen-peer-urls=http://$(IP):2380", "-listen-client-urls=http://$(IP):2379,http://127.0.0.1:2379", "-advertise-client-urls=http://$(IP):2379", "-discovery=https://discovery.etcd.io/xxxxxx"]
                             command: ["/usr/local/bin/etcd"]
                             volumeMounts: [{
                                 name:      "etcd3"
@@ -1329,7 +1329,7 @@
                 grpc: 7788
             }
         }
-        args: ["-cert=/etc/ssl/server.pem", "-key=/etc/ssl/server.key", "-grpc=:7788"] | []
+        args: ["-cert=/etc/ssl/server.pem", "-key=/etc/ssl/server.key", "-grpc=:7788"]
         env: {}
         volume: {
             "secret-volume": {
@@ -1454,7 +1454,7 @@
                         containers: [{
                             name:  "events"
                             image: "gcr.io/myproj/events:v0.1.31"
-                            args:  ["-cert=/etc/ssl/server.pem", "-key=/etc/ssl/server.key", "-grpc=:7788"] | []
+                            args: ["-cert=/etc/ssl/server.pem", "-key=/etc/ssl/server.key", "-grpc=:7788"]
                             volumeMounts: [{
                                 name:      v.name
                                 mountPath: v.mountPath
@@ -1986,7 +1986,7 @@
             ca:               "/etc/certs/servfx.ca"
             "ssh-tunnel-key": "/sslcerts/tunnel-private.pem"
         }
-        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-key=/etc/certs/client.key", "-cert=/etc/certs/client.pem", "-ca=/etc/certs/servfx.ca", "-ssh-tunnel-key=/sslcerts/tunnel-private.pem"] | []
+        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-key=/etc/certs/client.key", "-cert=/etc/certs/client.pem", "-ca=/etc/certs/servfx.ca", "-ssh-tunnel-key=/sslcerts/tunnel-private.pem"]
         env: {}
         volume: {
             "caller-disk": {
@@ -2130,7 +2130,7 @@
                         containers: [{
                             name:  "caller"
                             image: "gcr.io/myproj/caller:v0.20.14"
-                            args:  ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-key=/etc/certs/client.key", "-cert=/etc/certs/client.pem", "-ca=/etc/certs/servfx.ca", "-ssh-tunnel-key=/sslcerts/tunnel-private.pem"] | []
+                            args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-key=/etc/certs/client.key", "-cert=/etc/certs/client.pem", "-ca=/etc/certs/servfx.ca", "-ssh-tunnel-key=/sslcerts/tunnel-private.pem"]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -2207,7 +2207,7 @@
             "event-server":   "events:7788"
             "ssh-tunnel-key": "/etc/certs/tunnel-private.pem"
         }
-        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem"] | []
+        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem"]
         env: {}
         volume: {
             "secret-ssh-key": {
@@ -2351,7 +2351,7 @@
                         containers: [{
                             name:  "dishwasher"
                             image: "gcr.io/myproj/dishwasher:v0.2.13"
-                            args:  ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem"] | []
+                            args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem"]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -2428,7 +2428,7 @@
             "event-server":   "events:7788"
             "ssh-tunnel-key": "/etc/certs/tunnel-private.pem"
         }
-        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem"] | []
+        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem"]
         env: {}
         volume: {
             "expiditer-disk": {
@@ -2560,7 +2560,7 @@
                         containers: [{
                             name:  "expiditer"
                             image: "gcr.io/myproj/expiditer:v0.5.34"
-                            args:  ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem"] | []
+                            args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem"]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -2625,7 +2625,7 @@
             logdir:         "/logs"
             "event-server": "events:7788"
         }
-        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788"] | []
+        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788"]
         env: {}
         volume: {
             "secret-headchef": {
@@ -2757,7 +2757,7 @@
                         containers: [{
                             name:  "headchef"
                             image: "gcr.io/myproj/headchef:v0.2.16"
-                            args:  ["-env=prod", "-logdir=/logs", "-event-server=events:7788"] | []
+                            args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788"]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -2826,7 +2826,7 @@
             "reconnect-delay":   "1h"
             "-recovery-overlap": "100000"
         }
-        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-name=linecook", "-etcd=etcd:2379", "-reconnect-delay=1h", "--recovery-overlap=100000"] | []
+        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-name=linecook", "-etcd=etcd:2379", "-reconnect-delay=1h", "--recovery-overlap=100000"]
         env: {}
         volume: {
             "secret-linecook": {
@@ -2958,7 +2958,7 @@
                         containers: [{
                             name:  "linecook"
                             image: "gcr.io/myproj/linecook:v0.1.42"
-                            args:  ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-name=linecook", "-etcd=etcd:2379", "-reconnect-delay=1h", "--recovery-overlap=100000"] | []
+                            args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-name=linecook", "-etcd=etcd:2379", "-reconnect-delay=1h", "--recovery-overlap=100000"]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -3027,7 +3027,7 @@
             etcd:               "etcd:2379"
             "recovery-overlap": "10000"
         }
-        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem", "-reconnect-delay=1m", "-etcd=etcd:2379", "-recovery-overlap=10000"] | []
+        args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem", "-reconnect-delay=1m", "-etcd=etcd:2379", "-recovery-overlap=10000"]
         env: {}
         volume: {
             "secret-pastrychef": {
@@ -3159,7 +3159,7 @@
                         containers: [{
                             name:  "pastrychef"
                             image: "gcr.io/myproj/pastrychef:v0.1.15"
-                            args:  ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem", "-reconnect-delay=1m", "-etcd=etcd:2379", "-recovery-overlap=10000"] | []
+                            args: ["-env=prod", "-logdir=/logs", "-event-server=events:7788", "-ssh-tunnel-key=/etc/certs/tunnel-private.pem", "-reconnect-delay=1m", "-etcd=etcd:2379", "-recovery-overlap=10000"]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
diff --git a/internal/core/adt/equality.go b/internal/core/adt/equality.go
index 6d22a73..3dbc14f 100644
--- a/internal/core/adt/equality.go
+++ b/internal/core/adt/equality.go
@@ -43,6 +43,10 @@
 		return false
 	}
 
+	if x.IsClosed(ctx) != y.IsClosed(ctx) {
+		return false
+	}
+
 loop1:
 	for _, a := range x.Arcs {
 		for _, b := range y.Arcs {